from collections.abc import Iterable

# print(isinstance([],Iterable)) #判断是否可迭代
# print(isinstance({},Iterable))
# print(isinstance('abc',Iterable))
# print(isinstance((x for x in range(10)),Iterable))
# print(isinstance(5,Iterable))


# 加入__iter__()方法的对象是可迭代的
# 加入__iter__()和__next__()方法的对象是迭代器
# 迭代器是可迭代的，可迭代的不一定是迭代器
# 迭代器是一个可以记住遍历的位置的对象
# 迭代器对象从集合的第一个元素开始访问，直到所有的元素被访问完结束
class Reverse:
    """Iterator for looping over a sequence backwards."""

    def __init__(self, data):
        self.data = data
        self.index = len(data)

    def __iter__(self):
        return self

    def __next__(self):
        if self.index == 0:
            raise StopIteration
        self.index = self.index - 1
        return self.data[self.index]


# def reverse(data):
#     for index in range(len(data) - 1, -1, -1):
#         yield data[index]

# rev = Reverse("spam")
# print(iter(rev))

for char in Reverse("golf"):
    print(char)


# for char in reverse("golf"):
#     print(char)
